package eu.floranet.arquivo.model.persistence;

import java.util.Map;

import eu.floranet.arquivo.model.persistence.exception.EmptyLinkFile;
import eu.floranet.arquivo.model.persistence.exception.EmptyLinkProperties;
import eu.floranet.arquivo.model.persistence.exception.LinkException;

/**
 * Interface de implementação de método de retorno de valores
 * em forma de Map.
 * 
 * @author jmark
 *
 */
public interface IPersistenceLinkManager {

	/**
	 * Método de retorno dos valores da configuração em forma de {@literal Map<String, String>}.
	 * 
	 * @return {@literal Map<String, String>}
	 */
	public Map<String, String> getPropertiesMap();
	
	/**
	 * Método de atribuição de mapa de valores de configuração.
	 * Esta função serve apenas para atribuir os valores ao mapa e
	 * não sendo escritos em nenhum ficheiro, nem passa os mesmos para o objecto {@link PersistenceProperties}.
	 * 
	 * @param linkManagerMap - {@literal Map<String, String>}
	 * 
	 */
	public void setPropertiesMap(Map<String, String> linkManagerMap);
	
	/**
	 * Método de leitura e composição de mapa {@literal Map<String, String>} das
	 * propriedades presentes no ficheiro {@link PersistenceLinkFile} ou na lista de 
	 * propriedades do objecto {@link PersistenceLinkProperties}.
	 * 
	 * @throws EmptyLinkProperties Excepção de propriedades
	 * @throws EmptyLinkFile Excepção do ficheiro de configuração
	 * @throws LinkException Excepções multiplas
	 */
	public void readPersistenceProperties() throws EmptyLinkProperties, EmptyLinkFile, LinkException;
	
	/**
	 * Método de escrita das configurações num ficheiro de configuração
	 * atribuido pelo objecto {@link PersistenceLinkFile}.
	 *  
	 * @throws EmptyLinkProperties Excepção de propriedades
	 * @throws EmptyLinkFile Excepção do ficheiro de configuração
	 * @throws LinkException Excepções multiplas
	 */
	public void savePersistenceProperties() throws EmptyLinkProperties, EmptyLinkFile, LinkException;

}
